package com.yida.gwj.scene.expend.service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.yida.gwj.common.domain.GwjBaseHouse;
import com.yida.gwj.scene.expend.domain.GwjSceneExpendBusinessHouse;
import com.yida.gwj.scene.expend.domain.GwjSceneExpendBusinessHouseAndOwner;
import com.yida.gwj.scene.expend.domain.request.GwjSceneExpendHouseAndOwnerRequest;

/**
 * 业务房屋信息（旧支出模块）Service接口
 * 
 * @author hmh
 * @date 2023-08-14
 */
public interface IGwjSceneExpendBusinessHouseService {
    /**
     * 查询业务房屋信息（旧支出模块）
     * 
     * @param bizHouseId 业务房屋信息（旧支出模块）主键
     * @return 业务房屋信息（旧支出模块）
     */
    public GwjSceneExpendBusinessHouse selectGwjSceneExpendBusinessHouseByBizHouseId(Long bizHouseId);

    /**
     * 查询业务房屋信息（旧支出模块）列表
     * 
     * @param gwjSceneExpendBusinessHouse 业务房屋信息（旧支出模块）
     * @return 业务房屋信息（旧支出模块）集合
     */
    public List<GwjSceneExpendBusinessHouse> selectGwjSceneExpendBusinessHouseList(GwjSceneExpendBusinessHouse gwjSceneExpendBusinessHouse);

    /**
     * 新增业务房屋信息（旧支出模块）
     * 
     * @param gwjSceneExpendBusinessHouse 业务房屋信息（旧支出模块）
     * @return 结果
     */
    public int insertGwjSceneExpendBusinessHouse(GwjSceneExpendBusinessHouse gwjSceneExpendBusinessHouse);

    /**
     * 修改业务房屋信息（旧支出模块）
     * 
     * @param gwjSceneExpendBusinessHouse 业务房屋信息（旧支出模块）
     * @return 结果
     */
    public int updateGwjSceneExpendBusinessHouse(GwjSceneExpendBusinessHouse gwjSceneExpendBusinessHouse);

    /**
     * 批量删除业务房屋信息（旧支出模块）
     * 
     * @param bizHouseIds 需要删除的业务房屋信息（旧支出模块）主键集合
     * @return 结果
     */
    public int deleteGwjSceneExpendBusinessHouseByBizHouseIds(Long[] bizHouseIds);

    /**
     * 删除业务房屋信息（旧支出模块）信息
     * 
     * @param bizHouseId 业务房屋信息（旧支出模块）主键
     * @return 结果
     */
    public int deleteGwjSceneExpendBusinessHouseByBizHouseId(Long bizHouseId);

    /**
     * 20230816
     * 
     * 修改房屋选中状态
     * 
     * @param selectFlag 是否选中 1：已选择，0：未选择
     * @param areaId 地区ID
     * @param houseCodes 房屋标识码
     * @return
     */
    public int changeHouseIfSelected(Long bizId, String selectFlag, Long areaId, String[] houseCodes);

    /**
     * 20230816
     * 
     * 根据业务ID批量新增房屋信息
     * 
     * @param bizId 业务ID
     * @param houseList 房屋列表
     * @return
     */
    public int insertBatchGwjSceneExpendBusinessHouseByBaseHouse(Long bizId, List<GwjBaseHouse> houseList);

    /**
     * 20230816
     * 
     * 根据业务ID删除房屋信息
     * 
     * @param bizId 业务ID
     * @return
     */
    public int deleteGwjSceneExpendBusinessHouseByBizId(Long bizId);

    /**
     * 20230816
     * 
     * 根据业务ID获取实际分摊金额统计数据
     * 
     * @param bizId 业务ID
     * @param areaId 地区ID
     * @return
     */
    public BigDecimal selectActualAllocationMoneyTotalBybizIdAndAreaId(Long bizId, Long areaId);

    /**
     * 20230817
     * 
     * 根据业务ID查询房屋类型
     * 
     * @return
     */
    List<String> selectHouseUseType(Long bizId);

    /**
     * 20230817
     * 
     * 获取金额统计数据
     * 
     * @param bizId 业务ID
     * @param areaId 地区ID
     * @param selectFlag 是否选中 0：未选择，1：已选择，
     * @return total_lack_money(差额(总)),total_actual_allocation_money(实际分摊金额(总)),total_total_allocation_money(本次分摊总金额(总)),total_deposit_size(本次分摊总面积(总))
     */
    public Map<String, BigDecimal> countHoustData(Long bizId, Long areaId, String selectFlag);

    /**
     * 20230821
     * 
     * 根据业务ID批量修改房屋信息
     * 
     * @param bizId 业务ID
     * @param houseList 房屋列表
     * @return
     */
    public int upBatchGwjSceneExpendBusinessHouseByBaseHouse(List<GwjSceneExpendBusinessHouse> houseList);

    /**
     * 根据条件查询房屋数据
     * 
     * 20230821
     * 
     * hmh
     * 
     * @param bizId 业务ID
     * @param areaId 地区ID
     * @param selectFlag 选中状态
     * @return
     */
    public List<GwjSceneExpendBusinessHouseAndOwner> selectGwjSceneExpendBusinessHousesAndOwners(Long bizId, Long areaId, String selectFlag);

    /**
     * 检查业主信息
     * 
     * @param bizId 业务ID
     * @return
     */
    public boolean checkOwnerInfo(Long bizId);

    /**
     * 根据业务ID更改房屋和业主信息
     * 
     * @param gwjHouseAndOwnerRequest
     * @return
     */
    public boolean updatBusinessHouseAndOwnerInfoByBizId(GwjSceneExpendHouseAndOwnerRequest gwjSceneExpendHouseAndOwnerRequest);

    /**
     * 根据业务ID和房屋标识码查询业务房屋
     * 
     * @param bizId
     * @param houseCode
     * @return
     */
    public GwjSceneExpendBusinessHouse selectGwjSceneExpendBusinessHouseByBizIdAndHouseCode(Long bizId, String houseCode);
}
